/**
 * @Function 调用远程服务
 * @ProjectName credit-data-platform
 * @PackageName com.py.credit.service
 * @FileName XypjRemoteBaseService.java
 * @Date 2018年5月16日上午10:57:42
 * @Author Min DongXv
 * @Copyright (c) 2018, 金电联行 All Rights Reserved.
 */
package com.py.credit.service;

import com.py.credit.common.rest.RestServiceResult;
import com.py.credit.entity.DictDetailEntity;
import com.py.credit.entity.EasyCreditLogEntity;
import com.py.credit.entity.SysUser;
import com.py.framework.core.entity.SysAreaEntity;
import com.py.framework.core.entity.SysOfficeEntity;
import com.py.framework.core.entity.SysUserEntity;
import org.apache.ibatis.annotations.Param;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @Function 调用远程服务
 * @ClassName XypjRemoteBaseService
 * @Date 2018年5月16日 上午10:57:42
 * @Author Min DongXv
 */
public interface XypjRemoteBaseService {

    /**
     * @param regions
     * @return
     * @Function 通过区域ID获取区域名称对应MAP
     * @FileName XypjRemoteBaseService.java
     * @MethodName getAreaName
     * @Date 2018年5月16日 上午11:00:06
     * @Author Min DongXv
     */
    RestServiceResult<Map<String, String>> getAreaName(Set<String> regions, String jdToken);

    /**
     * @param regions
     * @return
     * @Function 通过区域ID获取区域列表
     * @FileName XypjRemoteBaseService.java
     * @MethodName getAreaList
     * @Date 2018年5月16日 上午11:00:06
     * @Author Min DongXv
     */
    RestServiceResult<List<SysAreaEntity>> getAreaList(Set<String> regions, String jdToken);

    /**
     * @param ids 用户ID
     * @return
     * @Function 通过用户ID获取用户列表
     * @FileName XypjRemoteBaseService.java
     * @MethodName getUsersByIds
     * @Date 2018年5月19日 下午4:44:58
     * @Author Min DongXv
     */
    RestServiceResult<List<SysUserEntity>> getUsersByIds(Set<Integer> ids, String jdToken);

    /**
     * @return
     * @Function 获取当前用户信息
     * @FileName XypjRemoteBaseService.java
     * @MethodName getCurrentUser
     * @Date 2018年5月19日 下午4:44:59
     * @Author Min DongXv
     */
    RestServiceResult<SysUser> getCurrentUser(String jdToken);

    /**
     * @param ids
     * @return
     * @Function 获取用户id和名字对应关系
     * @FileName XypjRemoteBaseService.java
     * @MethodName getUserName
     * @Date 2018年5月22日 上午11:06:56
     * @Author Min DongXv
     */
    RestServiceResult<Map<String, String>> getUserName(Set<Integer> ids, String jdToken);

    /**
     * @param jdToken
     * @return
     * @Function 获取当前用户的所有部门信息，包括下级子部门
     * @FileName XypjRemoteBaseService.java
     * @MethodName getCurrentUserOffices
     * @Date 2018年5月24日 上午10:55:44
     * @Author Min DongXv
     */
    RestServiceResult<List<SysOfficeEntity>> getCurrentUserOffices(String jdToken);

    /**
     * @param tybm
     * @return
     * @Function 获取指标的数据
     * @FileName XypjRemoteBaseService.java
     * @MethodName getIndexInfoByTybm
     * @Date 2018年12月6日 下14:20:44
     * @Author tt
     */
    RestServiceResult<List<LinkedHashMap<String, Object>>> getIndexInfoByTybm(String relateResource, String tybm, String userId);

    /**
     * @param tableList 数据列表
     * @param result    返回结果集
     * @param token     token
     * @param userIds   用户ID SET
     * @param idCode    列表中ID的key
     * @param nameCode  列表中name的key
     * @return
     * @Function 调用用户远程服务，进行姓名填充
     * @FileName XypjRemoteBaseService.java
     * @MethodName matchUserName
     * @Date 2018年5月9日 上午10:33:29
     * @Author Min DongXv
     */
    List<Map<String, Object>> matchUserName(List<Map<String, Object>> tableList,
                                            RestServiceResult<List<Map<String, Object>>> result, String token, Set<Integer> userIds, String idCode,
                                            String nameCode);
    
    public List<EasyCreditLogEntity> matchUserNameEntity(List<EasyCreditLogEntity> entity, String token, Set<Integer> userIds);
    

    RestServiceResult<LinkedHashMap> getTableInfoById(String tableId, String id, String mainName);

    /**
     * 添加待审批业务数据
     *
     * @param wfKey     工作流唯一key
     * @param accessKey 访问权限key
     * @param userId    业务添加用户
     * @param sysId     业务所属系统id
     * @param busId     业务id
     * @param busName   业务名称
     * @param busUrl    业务页面url
     * @param busType   业务类型
     * @param remark    备注
     * @return
     */
    RestServiceResult<Map<String, Object>> addWorkFlow(String wfKey, String accessKey, String userId, String sysId,
                                                       String busId, String busName, String busUrl, String busType, String remark);


    /**
     * 远程调用获取工作流异议处理业务id
     *
     * @param taskId
     * @return
     */
    RestServiceResult<Integer> getBusIdBuyTaskId(String taskId);

    /**
     * 查询系统归集侧边栏的表数据信息
     *
     * @param tableList
     * @return RestServiceResult
     * @author YaoS
     * @date 11:08 18/10/30
     **/
    RestServiceResult<List<Map<String, Object>>> selectLeftTable(String tableList, String tybm);

    /**
     * 查询法人或者自然人是否存在
     *
     * @param ztmc
     * @param bm
     * @param type
     * @return
     */
    public RestServiceResult checkZmtcIsExist(String ztmc, String bm, String type);

    List<Map> getTableValuesByTybmAndTable(String tableName, String tybm);

    List<Map> getAllEnterprise(String mainType, String selectedList, String batchId);

    List<String> selectTybmByLimit(String mainType, int start, int size);

    Long selectCountAll(String mainType);

    String checkTable(String list, String tableId);

    String addTaskInfoForXypj(String taskName, String menuId, String taskDesc, String taskUrl, String cronExp);

    String updateTaskStatusForXypj(@Param("status") String status, @Param("menuId") String menuId, @Param("taskUrl") String taskUrl);

    List<Map> autoScoreByIndexSql(String mainType, String sql, String list, String batchId);

    List<String> selectBatchExport(String mainType, String batchId);

    RestServiceResult<DictDetailEntity> getDictByDtlKey(String dictKey, String dtlKey);

    RestServiceResult getValueBySql(String sql, String jdToken);

    /**
     * 功能描述:根据企业名查询统一编码
     *
     * @param mainName 企业名
     * @return 查询结果
     * @author YaoS
     * @date 19/5/17 15:50
     */
    String selectTybm(String mainName);

    /**
     * 定时任务: 查询已删除的部门ID
     *
     * @author YaoS
     * @date 19/5/27 14:27
     */
    List<String> selectDeleteDept();
    
    RestServiceResult<SysOfficeEntity> getOfficesById(long officeId);
    
    Long getDeptIdByName(String deptName , String token);
    
}
